package PruebasUnitarias;

import junit.framework.TestCase;
import Modelo.*;

public class LaserTest extends TestCase {
	private Bloque[][] bloques;
	private Mapa mapa;
	
	
	protected void setUp() throws Exception {
		super.setUp();
		mapa= new Mapa(); 
		bloques= new Bloque[3][5];
		
		for(int i=0;i<3;i++)
			for(int j=0;j<5;j++)
				if(i==1&&(j<3&&j>0))
					bloques[i][j]= new Vacio(mapa);
				else
					bloques[i][j]= new Tierra(mapa);
		mapa.inicializarMapa(bloques);
	}
	
	public void testEsEjecutableSobre(){
		PoseedorDeHabilidad pooglin= new Pooglin(mapa);
		bloques[1][1].alojar(pooglin);
		Habilidad laser= new Laser();
		pooglin.asignarHabilidad(laser);
		assertFalse(laser.esEjecutableSobre(pooglin));
		bloques[1][1].desalojar(pooglin);
		bloques[1][2].alojar(pooglin);		
		assertTrue(laser.esEjecutableSobre(pooglin));
	}
	
	public void testEjecutarSobre(){
		PoseedorDeHabilidad pooglin= new Pooglin(mapa);
		Habilidad laser= new Laser();
		pooglin.asignarHabilidad(laser);
		bloques[1][2].alojar(pooglin);
		for(int i=0;i<5;i++){
			assertTrue(bloques[1][3] instanceof Tierra);
			laser.ejecutarSobre(pooglin);
		}
		assertTrue(bloques[1][3] instanceof Vacio);
		
		// el hielo es inmune al laser
		mapa.ModificarBloquePor(bloques[1][3], new Hielo(mapa));
		for(int i=0;i<5;i++){
			assertTrue(bloques[1][3] instanceof Hielo);
			laser.ejecutarSobre(pooglin);
		}
		assertFalse(bloques[1][3] instanceof Vacio);
		assertTrue(bloques[1][3] instanceof Hielo);
	}
	
}
